<?php
/**
 * Created by PhpStorm.
 * User: Bable
 * Date: 2018/1/3
 * Time: 下午2:01
 */

namespace Backstage\Controller;
use Think\Controller;

class CommonController extends Controller{


    /**
     * 全部Controller执行之前会执行的方法
     * 1、抛出菜单数据
     * 2、添加登陆验证
     * @modify qax 2014.10.15 10:26
     */
    public function _initialize()
    {
        if(C('#LOCAL_TEST_MODEL')){

            return;
        }

        if(('WechatList' == CONTROLLER_NAME && 'wxList' == ACTION_NAME) || ('Trunk' == CONTROLLER_NAME && 'index' == ACTION_NAME) ){
            return;
        }
        //检测是否登录
        $this->loginOrNot();

        //如果为超级管理员，则输出全部菜单
        if (session(C('SUPERORNOT')) == true)
            $this->throwMenu();
        else
        {
            $this->getMenuByUserId();
        }

        $this->getCurrMenu();
        //扔出当前登录用户的名称
        $this->assign('LoginUser', session(C('LOGINNAME')));
    }

    /**
     * 判断是否有用户登录，没有则跳去登录界面
     */
    protected function loginOrNot()
    {
        if (session(C('LOGINNAME')) == null) {
            $this->redirect('Login/index');
        }else{
            //保证同一个账户不能同时登录
            $loginname = session(C('LOGINNAME'));
            $clientSid = cookie('PHPSESSID');
            $userModel = M('t_sys_user');
            $loginUser = $userModel->where(array('Loginname' => $loginname))->find();
            $dbSid = $loginUser['SessionID'];
            if($clientSid != $dbSid)
                $this->redirect('Login/index');
        }
    }

    /**
     * 在执行数据之前会调用的方法，以便抛出导航栏数据
     */
    // public function _before_index(){
    // $this->getCurrMenu();
    //}

    /**
     * 获得当前菜单
     */
    public function getCurrMenu()
    {
        $navigation = array();
        $menuId = $_GET['nav_id'] ? $_GET['nav_id'] : session('menuId');
        //保存menuId值到session中去
        session('menuId', $menuId);

        $menuModel = M('T_sys_menu');
        $item = $menuModel->where(array('ID' => $menuId))->find();
        if ($item['Parent_id'] == -1) {
            $navigation[0] = $item['Name'];
            $navigation[1] = '';
            $navigation_id[0] = $item['ID'];
            $navigation_id[1] = '-1';
        } else {
            $parentId = $item['Parent_id'];
            $parentItem = $menuModel->where(array('ID' => $parentId))->find();
            $navigation[0] = $parentItem['Name'];
            $navigation[1] = $item['Name'];
            $navigation_id[0] = $item['ID'];
            $navigation_id[1] = $parentItem['ID'];
        }

        //把当前页码保存到session中
        $p = $_GET['p'];
        session(C('PAGE'), $p);
        //保存结束

        /**
         * 抛出导航栏数据
         */
        $this->assign('navigation', $navigation);
        //用于控制-当前活动菜单 样式
        $this->assign('navigation_id', $navigation_id);
    }

    /**
     * 抛出菜单栏数据
     */
    protected function throwMenu()
    {
        /**
         * 抛出菜单栏数据
         */
        $menusService = D('menu', 'Service');
        $result = $menusService->getMenus(false);

        /**
         * 根据用户的id动态生成菜单栏数据
         */

        $this->assign('slideMenus', $result['data']);
    }

    /**
     * 根据登录id取菜单
     */
    protected function getMenuByUserId()
    {
        /**
         * 抛出菜单栏数据
         */
        $menusService = D('menu', 'Service');
        $result = $menusService->getMenuByUserId();
        if(session(C("TYPE")) == "DISTRIBUTOR")
        {
            $menu =array();
            for($i=0;$i<=end(array_keys(($result)));++$i)
            {
                if($result[$i] !=NULL)
                {
                    for($m=0;$m<count($result[$i]['childMenu']);++$m)
                    {
                        $temp = $result[$i]['childMenu'][$m]['Url'];
                        $temp = explode("/",$temp);
                        $menu[] = $temp[0];
                    }
                }
            }
            $export = array(
                "User/modify_password",
                'User/modifyPassword',
            );
            $url = CONTROLLER_NAME."/".ACTION_NAME;
            /**
             * 根据用户的id动态生成菜单栏数据
             */
            if(in_array(CONTROLLER_NAME,$menu) || in_array($url,$export))
            {
                $this->assign('slideMenus', $result);
            }
            else{
                echo "<script>alert('警告：系统错误，稍后再试');</script>";  //权限不足引发错误
//                $loginService = D('Login', 'Service');
//                $result = $loginService->exitLogin();
                $this->error("系统发生错误！！");
            }
        }

        $this->assign('slideMenus', $result);

    }

    /**
     * 后台管理
     * --左边菜单列表
     */
    protected function get_manage_menus()
    {
        $menusService = D('menu', 'Service');
        $result = $menusService->getMenus(false);
        $this->assign('slideMenus', $result['data']);
    }

    /**
     * 传入结果字符串和跳转的url
     * @param $result
     * @param $url
     */
    protected function jump($result, $url)
    {
        if (false == $result['status']) {
            $this->error($result['data']['error'], $url);
        } else {
            $this->success($result['data']['success'], $url);
        }
    }

    /**
     * 跳转至index界面
     * 当跳转到当前模块下的index.html界面时调用该方法
     */
    protected function jumpIndex($result)
    {
        if (false == $result['status']) {
            $this->error($result['data']['error'], $this->indexUrl());
        } else {
            $this->success($result['data']['success'], $this->indexUrl());
        }
    }

    /**
     * 动态拼接跳转到index.html的url
     * @return string
     */
    protected function indexUrl()
    {
        return U(CONTROLLER_NAME . '/index', array('id' => session('menuId'), 'p' => session('PAGE')));
    }


    /**
     * 扔出当前返回到index页面的url
     */
    protected function throwIndexUrl()
    {
        $this->assign('indexUrl', $this->indexUrl());
    }

    /**
     * 扔出共同的分页及列表数据
     * @param $data
     */
    protected function throwCommonData($data)
    {
        $this->assign('list', $data['list']);   //列表数据集
        $this->assign('page', $data['page']);   //分页
        $this->assign('js', $data['js']);
    }

    /**
     * @param $msg 内容
     * @param $filename 文件名
     */
    function writeLog($msg, $filename = "syslog.txt")
    {
        $filename = 'log/' . date('Ymd') . '_' . $filename;
        file_put_contents($filename, "Time " . date('Y-m-d H:i:s') . $msg . "\r\n", FILE_APPEND);
    }

    //字符串转UTF-8
    function fixEncoding($in_str)

    {

        $cur_encoding = mb_detect_encoding($in_str) ;

        if($cur_encoding == "UTF-8" && mb_check_encoding($in_str,"UTF-8")){
            return $in_str;
        }else{
            return utf8_encode($in_str);
        }
    }

    function pageMaker($count, $listRows = 50){
        if(is_array($count)){
            $count = count($count);
        }
        $Page = new \Think\Page($count,$listRows);
        $js = $Page->js();
        $show = $Page->show();
        $this->assign('page', $show);
        $this->assign('js', $js);
    }


    /**
     * 根据对象类型获取对应的对象名称 -- 修改成switch case方式
     * 有新的请记得在这添加对应记录
     */
    public function getObjectTypeName($objType)
    {
        switch ($objType) {
            case 'venue':
                return '体育场馆';
            case 'activity':
                return '体育活动';
            case 'policy':
                return '体育政策';
            case 'sporting_event':
                return '体育赛事';
            case 'newsCommon':
                return '通用新闻';
            case 'newsJjty':
                return '竞技体育新闻';
            case 'newsTycy':
                return '体育产业新闻';
            case 'newsQzty':
                return '群众体育新闻';
            case 'newsTyst':
                return '体育社团新闻';
            default:
                return '对象类型出错！';
        }
    }


    /**
     * 获得所有珠海体育相关的对象信息 -- 英文名=>中文名
     * 有新的请记得在这添加对应记录
     */
    public function getZhtyObjType()
    {
        $objList = array(
            [
                'id' => 'venue',
                'name' => '体育场馆',
            ],
            [
                'id' => 'activity',
                'name' => '体育活动',
            ],
            [
                'id' => 'policy',
                'name' => '体育政策',
            ],
            [
                'id' => 'sporting_event',
                'name' => '体育赛事',
            ],
            [
                'id' => 'newsCommon',
                'name' => '通用新闻',
            ],
            [
                'id' => 'newsJjty',
                'name' => '竞技体育新闻',
            ],
            [
                'id' => 'newsQzty',
                'name' => '群众体育新闻',
            ],
            [
                'id' => 'newsTycy',
                'name' => '体育产业新闻',
            ],
            [
                'id' => 'newsTyst',
                'name' => '体育社团新闻',
            ],
        );

        return $objList;
    }

}